# QuestDB

[QuestDB][questdb] is a high-performance [time-series database][time-series-database-glossary] which helps you overcome ingestion bottlenecks.

<WarningBox>

The driver for QuestDB is supported by its vendor. Please report any issues to
their [Slack][questdb-slack].

</WarningBox>

## Prerequisites

- The hostname for the QuestDB database server
  - If QuestDB is not running, checkout the QuestDB [quick start][questdb-quick-start]
- [Docker][docker] (optional)

## Setup

### Docker

Create a dockerfile within the project directory:

```yaml title=docker-compose.yml
services:
  cube:
    environment:
      - CUBEJS_DEV_MODE=true
    image: "cubejs/cube:latest"
    ports:
      - "4000:4000"
    volumes:
      - ".:/cube/conf"
  questdb:
    container_name: questdb
    hostname: questdb
    image: "questdb/questdb:latest"
    ports:
      - "9000:9000"
      - "8812:8812"
```

Within your project directory, create an `.env` file:

```dotenv
CUBEJS_DB_TYPE=questdb
CUBEJS_DB_HOST=my.questdb.host
CUBEJS_DB_PORT=8812
CUBEJS_DB_NAME=qdb
CUBEJS_DB_USER=admin
CUBEJS_DB_PASS=quest
```

Finally, bring it all up with Docker:

```bash title=shell
docker-compose up -d
```

Access Cube at http://localhost:4000 & QuestDB at http://localhost:9000

## Environment Variables

| Environment Variable | Description                                                                         | Possible Values           | Required |
| -------------------- | ----------------------------------------------------------------------------------- | ------------------------- | :------: |
| `CUBEJS_DB_HOST`     | The host URL for a database                                                         | A valid database host URL |    ✅    |
| `CUBEJS_DB_PORT`     | The port for the database connection                                                | A valid port number       |    ✅    |
| `CUBEJS_DB_NAME`     | The name of the database to connect to                                              | A valid database name     |    ✅    |
| `CUBEJS_DB_USER`     | The username used to connect to the database                                        | A valid database username |    ✅    |
| `CUBEJS_DB_PASS`     | The password used to connect to the database                                        | A valid database password |    ✅    |
| `CUBEJS_DB_SSL`      | If `true`, enables SSL encryption for database connections from Cube                | `true`, `false`           |    ❌    |
| `CUBEJS_DB_MAX_POOL` | The maximum number of concurrent database connections to pool. Default is `8`       | A valid number            |    ❌    |
| `CUBEJS_CONCURRENCY` | The number of [concurrent queries][ref-data-source-concurrency] to the data source | A valid number |    ❌    |

[ref-data-source-concurrency]: /product/configuration/concurrency#data-source-concurrency

[questdb]: https://questdb.io/
[questdb-slack]: https://slack.questdb.io/
[time-series-database-glossary]: https://questdb.io/glossary/time-series/database/
[questdb-quick-start]: https://questdb.io/docs/quick-start/
[docker]: https://docs.docker.com/get-docker/
